home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
051-075
/
disk_052
/
tek4010
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
8KB
|
279 lines
/*
.index main.c
*/
/************************************************************************
* vt100 terminal emulator with xmodem transfer capability
* written by Michael Mounier
* new version by Dave Wecker
* Tek 4010 emulation added, and several bug fixes T.Whelan
* this version has trouble at 19200 bps in tek mode but not in vt100
* sugestions would be appreciated. I have managed for plain text ( no scroll)
* data rates of about 15000 bps, but scrolling makes this much worse. This
* version lets AmigaDOS do the X-On/X-Off as it wants to. Amiga Dos 1.2
* will let the user control this.
* T.Whelan
* Dept of Physics & Astronomy
* University of Iowa
* Iowa City
* IA 52244
*
* SPAN: IOWA::WHELAN
* bitnet - too unreliable.
*
* 860823 DBW - Integrated and rewrote lots of code
* v2.0 860809 DBW - Major rewrite
* v1.1 860720 DBW - Switches, 80 cols, colors, bug fixes
* v1.0 860712 DBW - First version released
*
*
************************************************************************/
/* all includes defines and globals */
#define MODULE_MAIN
#include "vt100.h"
/******************************************************/
/* Main Program */
/* */
/* This is the main body of the program. */
/******************************************************/
FILE * tranr = NULL;
FILE * trans = NULL;
int send;
/*
.page.index main
*/
main(argc,argv)
int argc;
char **argv;
{
ULONG class;
unsigned int code;
int la, dola, actual;
char c, *base, *this, *exitloop;
base = NULL; /* avoid a Lattice warning message */
InitDefaults (argc,argv);
InitDevs ();
InitTek (mywindow->UserPort);
InitMenu ();
KeepGoing = TRUE;
send = FALSE;
maxcol = MAXX / 8;
x = MINX ;
y = MINY;
curmode = 0;
script_on = FALSE;
script_wait= TRUE;
SetAPen (mywindow->RPort,1);
cursoron ();
cursoroff ();
emit (12);
BeginIO (Read_Request);
while( KeepGoing )
{
/* wait for window message or serial port message */
cursoron ();
if (script_wait) /* if script ready dont wait here */
Wait(
(1L << Read_Request->IOSer.io_Message.mn_ReplyPort->mp_SigBit) |
(1L << mywindow->UserPort->mp_SigBit) |
(1L << Script_Timer_Port->mp_SigBit));
cursoroff ();
#if 0
/* do ascii file send */
if (send)
{
if ((c = getc (trans)) != EOF) {
if (c == '\n') c = '\r';
sendchar (c);
}
else {
fclose (trans);
emits ("\nFile Sent\n");
send = FALSE;
}
}
#endif
/* see if there are any characters from the host */
if (CheckIO (Read_Request))
{
WaitIO (Read_Request);
doremote (rs_in[0]);
#if 0
if (script_on) chk_script (rs_in[0]);
#endif
Read_Request->IOSer.io_Command = SDCMD_QUERY;
BeginIO (Read_Request);
WaitIO (Read_Request);
Read_Request->IOSer.io_Command = CMD_READ;
actual = (int) Read_Request->IOSer.io_Actual;
if (actual > 0)
{
Read_Request->IOSer.io_Length =
Read_Request->IOSer.io_Actual;
BeginIO (Read_Request);
WaitIO (Read_Request);
Read_Request->IOSer.io_Length = 1;
dola = 0;
la = 0;
this = &rs_in[0];
exitloop = this + actual;
for (; this < exitloop; this++)
{
#if 0
if (script_on) chk_script (&this);
#endif
if (dola != 0)
{
if (isprint (*this))
la++;
else
{
/* ok, got a non printing char, let's dump
* whatever has come heretofore.
*/
if (la > 0)
emitbatch (la,base);
doremote (*this);
/* reset state variables */
la = 0;
dola = 0;
} /* end handling of non-printing chars */
}
else /* dola is == 0 */
{
doremote (*this);
/* doremote () has set these control flags: */
if (inesc < 0 && inctrl < 0 && a[alt] == 0)
{
dola = 1;
base = this + 1;
la = 0;
}
} /* endifthenelse (dola!=0) */
} /* end for loop(; this < exitloop; this++) */
/* dump anything left in the lookahead buffer */
if (la > 0)
emitbatch (la, base);
} /* endif (actual > 0) */
BeginIO (Read_Request);
} /* endif (CheckIO (Read_Request)) */
/*
.page
*/
/* ok, you handled whatever i/o came from the serial port, now
* handle whatever the operator has for you from the menu or
* from the keyboard.
*/
while (NewMessage = (struct IntuiMessage *)
GetMsg (mywindow->UserPort) )
{
class = NewMessage->Class;
code = NewMessage->Code;
ReplyMsg (NewMessage);
switch( class )
{
case RAWKEY:
c = toasc(code,0);
break;
case MENUPICK:
if ( code != MENUNULL )
menupick(code);
}/* end switch */
}/* endwhile ( newmessage ) */
if (!script_wait ||
(CheckIO(&Script_Timer) && script_wait == WAIT_TIMER))
do_script_cmd(NEXTCOMMAND);
} /* end while ( keepgoing ) */
/* It must be time to quit, so we have to clean
* up and exit.
*/
CloseDevice (&Timer);
DeletePort (Timer_Port);
CloseDevice (&Script_Timer);
DeletePort (Script_Timer_Port);
CloseDevice (Read_Request);
DeletePort (Read_Request->IOSer.io_Message.mn_ReplyPort);
FreeMem (Read_Request,(long)sizeof(*Read_Request));
CloseDevice (Write_Request);
DeletePort (Write_Request->IOSer.io_Message.mn_ReplyPort);
FreeMem (Write_Request,(long)sizeof(*Write_Request));
ClearMenuStrip (mywindow);
CloseWindow (mywindow);
CloseTek ();
exit (FALSE);
} /* end main */
/*
.page.index do_capture
*/
do_capture (file)
char * file;
{
static int capture;
if (capture == TRUE)
{
capture = FALSE;
fclose (tranr);
emits ("\nEnd File Capture\n");
}
else
{
if (file == NULL)
{
emits ("\nAscii Capture:");
filename (name);
}
else
strcpy(name, file);
if ((tranr = fopen (name,"w")) == 0)
{
capture = FALSE;
emits ("\nError Opening File\n");
return (FALSE);
}
capture = TRUE;
}
}/* end do_capture */
/*
.index do_send
*/
do_send (file)
char *file;
{
if (send == TRUE)
{
send = FALSE;
fclose (trans);
emits ("\nFile Send Cancelled\n");
}
else
{
if (file == NULL)
{
emits ("\nAscii Send:");
filename (name);
}
else
strcpy(name, file);
if ((trans = fopen (name,"r")) == 0)
{
send = FALSE;
emits ("\nError Opening File\n");
return (FALSE);
}
send = TRUE;
}
}/* end do_send */